package zisu.netty.practice.NIO;

import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.RandomAccessFile;
import java.nio.MappedByteBuffer;
import java.nio.channels.FileChannel;
import java.util.Random;

/**
 * @Desc: "1.MappedBuffer可以让文件直接在内存（堆外内存）中修改（操作系统不需要拷贝一次）；；2. "
 * @Author: caixiang
 * @DATE: 2020/7/1 11:10
 */
public class MappedByteBufferTest {
    public static void main(String[] args) throws IOException {
        RandomAccessFile randomAccessFile = new RandomAccessFile("d:\\1.txt","rw");
        FileChannel channel = randomAccessFile.getChannel();

        /**
         * 参数：
         *      1.是选择读写模式
         *      2.可以修改的起始位置
         *      3.映射到内存的大小（不是索引位置），5及时最多能操作0 开始位置 后面的5个字节，
         *      即将 1.txt 的多少个字节映射到内存（能够映射多少就能修改多少）；；可以修改的范围是0-5
         * */
        MappedByteBuffer map = channel.map(FileChannel.MapMode.READ_WRITE, 0, 5);

        //'H' 确实是 以 8位形式 存储的 ，但是我们在txt 中看 也是UTF-8编码 中看 也就是H
        map.put(0,(byte)'H');
        map.put(3,(byte)'9');
        randomAccessFile.close();
    }
}
